package reflect;

import java.lang.reflect.Method;
import java.util.Scanner;

public class ReflectDemo4 {
    public static void main(String[] args) {
        Person p = new Person();
        p.sayHello();
        // 通过反射调用sayHello方法
        try {
            //反射机制实例化对象
            Class<?> cls = Class.forName("reflect.Person");
            Object obj = cls.newInstance();
            //反射机制调用方法
            //通过类对象获取要调用的方法
            Method method = cls.getMethod("sayHello");
            //Method类上的方法:invoke用于执行该方法
            method.invoke(obj);//p.sayHello();

            Method method1 = cls.getMethod("getName");
            Object returnValue = method1.invoke(obj);
            System.out.println("返回值:"+returnValue);

            Scanner sc = new Scanner(System.in);
            System.out.println("请输入类名:");
            String className = sc.next();

            System.out.println("请输入方法名:");
            String methodName = sc.next();

            Class<?> cls1 = Class.forName(className);
            Object obj1 = cls1.newInstance();
            Method method2 = cls1.getMethod(methodName);
            method2.invoke(obj1);

        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}
